/** ======== 路由规则 ========
 *  目前只支持 单层路由
 */

/** 构建Router对象
*   routes: 已经注册绑定了的路由地址的对象集合
*   currentUrl: 当前路由地址的参数(包括path，query)
*/
function Router() {
    this.routes = {};
    this.currentUrl = '';
    this.history = [];
    this.direction = 'forward'; //路由方向，前进/后退== forward/back;
}

/** 路由注册
*   参数： 
*       path：路由路径名称；
*       callback：路由跳转至改地址时，需要回调处理的事件方法
*/
Router.prototype.route = function(path, callback) {
    path = path.replace(/\s*/g,"");//过滤空格
    if(callback && Object.prototype.toString.call(callback) === '[object Function]' ){
        this.routes[path] = callback;
    }

};

/** 更新路由的方法 */
Router.prototype.refresh = function() {
    this.currentUrl = funs.getUrlParams();
    if(this.routes[this.currentUrl.path]){
        let level_1 = this.currentUrl.path.split('/').length;
        let level_2 = this.history.length > 0? this.history[this.history.length -1].split('/').length :0;
        // 去到首页，或者是浏览器回退事件
        if(this.currentUrl.path == 'index' || level_2 > level_1){
            this.direction = 'back';
        }
        this.routes[this.currentUrl.path]();
        this.history.push(this.currentUrl.path);
    }else{
        //不存在的地址重定向到首页
        location.hash = 'index';
        this.routes['index']();
    }

};

// 初始化路由，监听页面load事件及页面地址hashchange事件；
Router.prototype.init = function() {
    window.addEventListener('load', ()=>{
        this.refresh();
        globalData.entryPage = this.currentUrl.path || 'index';
        globalData.domReady = true;
        $(window).trigger('routeReady');
    }, false);
    window.addEventListener('hashchange', (a)=>{
        this.direction = 'forward';
        this.refresh();
    }, false);
};

//解析当前地址的方法； 不放funs而放这儿，比较好找
funs.getUrlParams = function () {
    let hashDeatail = location.hash.split("?"),
        hashName = hashDeatail[0].split("#")[1],//路由地址
        params = hashDeatail[1] ? hashDeatail[1].split("&") : [],//参数内容
        query = {};
    for(let i = 0;i<params.length ; i++){
        let item = params[i].split("=");
        query[item[0]] = item[1]
    }
    return 	{
        path:hashName,
        query:query
    }
};

window.Router = new Router();
window.Router.init();

// 其他模块回到首页的处理逻辑；此举是为了兼容浏览器的返回按钮和手机的物理返回键的“返回”事件；
// 模块顶部的‘<’按钮的返回的处理逻辑则在funs的swipeModule中已经处理了

function routeTo(src,moduleName) {
    if(Router.direction == 'forward'){
        funs.swipeModule(src,'100%','left',null,true);
    }else{
        funs.routeToModule(moduleName);
    }
}

/** 注册路由 */
Router.route('index', function() {
    funs.routeToModule('index');
});
// 个人资料
Router.route('user/UserInfo', function() {
    routeTo('modules/user/UserInfo.js','UserInfo');
});
// 我的账户
Router.route('pack/MyPack', function() {
    routeTo('modules/pack/MyPack.js','MyPack');
});
// 设置业务范围
Router.route('user/SetService', function() {
    routeTo('modules/user/SetService.js','SetService');
});
// 选择订单省份
Router.route('project/SelProvDemand', function() {
    routeTo('modules/project/SelProvDemand.js','SelProvDemand');
});
// 选择订单城市
Router.route('project/SelProvDemand/SelCityDemand', function() {
    routeTo('modules/project/SelCityDemand.js','SelCityDemand');
});
// 设置业务类型
Router.route('user/SetService/ServiceType', function() {
    routeTo('modules/user/ServiceType.js','ServiceType');
});
// 设置业务区域
Router.route('user/SetService/ServiceArea', function() {
    routeTo('modules/user/ServiceArea.js','ServiceArea');
});
// 个人会员等级
Router.route('user/VipLevel', function() {
    routeTo('modules/user/VipLevel.js','VipLevel');
});
// 邀请列表
Router.route('user/VipLevel/Invitation', function() {
    routeTo('modules/user/Invitation.js','Invitation');
});
// 关于我们
Router.route('aboutUs', function() {
    routeTo('modules/about/AboutForm.js','AboutForm');
});
// 抢单项目详情
Router.route('demand', function() {
    routeTo('modules/DemandDetail.js','DemandDetail');
});
// 项目反馈
Router.route('project/FeedbackDemand', function() {
    routeTo('modules/project/FeedbackDemand.js','FeedbackDemand');
});
// 项目反馈锁定
Router.route('project/FeedbackDemand/FeedbackLock', function() {
    routeTo('modules/project/FeedbackLock.js','FeedbackLock');
});
// 项目反馈取消
Router.route('project/FeedbackDemand/FeedbackCancel', function() {
    routeTo('modules/project/FeedbackCancel.js','FeedbackCancel');
});
// 项目反馈结果
Router.route('project/FeedbackDemand/FeedbackResult', function() {
    routeTo('modules/project/FeedbackResult.js','FeedbackResult');
});
